Stream 이란?

Reference

  • 스트림(Stream) 이란? - 정보통신기술용어해설
  • 스트림(Stream)이란 - 프로그래머의 블로그
  • Java IO : Input-output in Java with Examples - geeksforgeeks.com
  • Java IO Stream - studytonight.com

자바의 입출력과 관련해서 이것저것 찾아보다가 stream에 대해 잘 이해해두면 좋을 것 같아 정리하게 되었다.
(JDK 8에서 Stream API가 추가되기도 했고… 여러모로 정확한 개념 이해가 중요할 것 같다)


I/O Stream

i/o operation

이렇게 프로그래밍 언어들은 스트림(stream)을 통해 데이터를 입력받고 출력한다.

정보통신기술용어해설 에 따르면,

Stream이란?

※ 영어 뜻으로는, 흐르는 시냇물등을 의미

ㅇ [데이터 관점]

  • 일반적으로, 데이터,패킷,비트 등의 일련의 연속성을 갖는 흐름을 의미
    . 음성,영상,텍스트 등의 작은 데이터 조각들이 하나의 줄기를 이루며,
    . 순서대로 물 흐르듯이 전송되는 데이터 열(列)

Stream 즉, 시냇물은 연속적이고 흐르는 것이 핵심이고 이 용어가 사용되는 곳에 따라 해석이 조금 확장되는 것 같다

예를 들어, 음료수와 그 음료수에 빨대가 꽂혀 있다고 하자.
빨대를 쭉 빨아 당기면 음료수가 빨대에 모이게 되고, 계속 빨아 당기면 입안으로 음료수가 들어오게 된다.
여기서 음료수는 입력 받고자하는 데이터가 되고 빨대는 스트림, 입은 프로그램으로 생각해볼 수 있다.
(반대는… 상상에 맡긴다)

데이터를 운반하는데 사용되는 연결통로같은 개념이라면 왜 굳이 스트림이라는 단어를 사용했을까?
이는 데이터가 물의 흐름과 같이 흘러가고 물이 한쪽 방향으로만 흐르는 것 같이 데이터가 단방향 통신 만 가능하기 때문이다.
즉 하나의 스트림으로 입력과 출력을 동시에 처리할 수 없다.

io stream

ㅇ 스트림 사용 이유

  • 물리 디스크상의 파일,장치들을 통일된 방식으로 다루기 위한 가상적인 개념
    . 따라서, 스트림은 어디서 나왔는지 어디로 가는지 신경을 쓸 필요없이 자유롭게
    어떤 장치,프로세스,파일들과 연결될 수 있어 프로그래머에게 많은 편리성 줌

Java에서 Stream 종류

1. Operation 타입에 따른 스트림

  • Input Stream

input stream

  • Output Stream

output stream

2. File 타입에 따른 스트림

file stream